package cn.wl.crm.service.impl;


import cn.wl.basic.service.impl.BaseServiceImpl;
import cn.wl.crm.domain.Permission;
import cn.wl.crm.domain.Role;
import cn.wl.crm.mapper.RoleMapper;
import cn.wl.crm.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class RoleServiceImpl extends BaseServiceImpl<Role>
        implements IRoleService {

    @Autowired
    private RoleMapper roleMapper;


    //保存role表 和 中间表权限
    //{name:"演员"，permissions:[{id:1},{id:2}]}
    @Override
    public void saveRolePermission(Role role) {
        //保存角色
        roleMapper.save(role);//5 --》 5，1  5,2
        //保存中间表？ t_role_permisson （roleId,permissionId）
        Long roleId = role.getId();
        //保存到中间表 insert into t_role_permisson(rid,pid) values (#{roleId},
        // #{permissionId})
        //方式一：问题 循环传入很多次数据库
//        List<Permission> permissions = role.getPermissions();
//        for(int i=0;i<permissions.size();i++){
//            Permission permission = permissions.get(i);
//            Long pid = permission.getId();
            //创建中间表对象 RolePermission(roleId,PermissionId)
             //RolePermission rolePermission = new RolePermission(roleId,pid);
            //insert into t_role_permisson(rid,pid) values (#{roleId},#{permissionId}）
//        }


        //方式二： insert into t_role_permisson(rid,pid) values (5,1）(5,2）
        // insert into t_role_permission(role_id,permission_id)
        // values (5,8),(5,9)
        List<Permission> permissions = role.getPermissions();
        //[{5,1},{5,2}]
        List<Map> rolePermisisonsList = new ArrayList();
        for(int i=0;i<permissions.size();i++){
            Permission permission = permissions.get(i);
            Long pid = permission.getId();
            //可以创建一个中间表对象 用来存储 roleid 和permissionId
            //不用中间表对象 使用Map(map代替对象)
            HashMap rpMap = new HashMap();
            rpMap.put("role_id",roleId);
            rpMap.put("permission_id",pid);
            rolePermisisonsList.add(rpMap);
        }
        /**
         * insert into t_role_permission(role_id,permission_id)
         *          values (5,8),(5,9)
         *          foreach
         */
        roleMapper.saveRolePermisison(rolePermisisonsList);


    }

    //删除方法

    @Override
    public void delete(Long id) {
        //删除中间表数据
        roleMapper.deleteRolePermission(id);
        //删除role表数据
        super.delete(id);
    }


}
